11077. Смена стиля
Желтому нужно выполнить задание
по перезагрузке компьютера. У него есть специальная reboot-флешка с программой.
Все переменные в этой программе написаны в стиле CamelCase или camelCase.
Желтого это не устраивает, и он хочет чтобы все переменные были написаны в
стиле snake_case.
Оба этих стиля используются для
того, чтобы в строке без пробелов написать фразу из нескольких слов. В camelCase (CamelCase)
для этого первая буква каждого слова из фразы, кроме возможно первого, делается
заглавной, все остальные буквы остаются маленькими, и затем слова записываются
друг за другом без пробелов. В snake_case все буквы слов оставляются
маленькими и слова разделяются символом ‘_’.
Помогите Желтому преобразовать
несколько названий переменных из camelCase (CamelCase) в snake_case.
Вход. В первой строке дано одно целое
число n (1 ≤ n ≤ 100) – количество названий переменных, для которых Желтый хочет поменять стиль.
Далее даны n строк si (1 ≤ |si| ≤ 1000), каждая из которых состоит из латинских букв – названия переменных.
Выход. Выведите название каждой
переменной, преобразованное в snake_case.
Пример
входа |
Пример
выхода |
4 camelCase CamelCase toBeOrNotToBe ABCDE |
camel_case camel_case to_be_or_not_to_be a_b_c_d_e |
строки
Читаем входную строку. Заглавные
буквы преобразовываем в строчные. Перед каждой такой преобразованной буквой
добавляем символ ‘_’ (если только буква не является первой в слове).
Реализация алгоритма
Читаем количество тестов n.
cin >> n;
Последовательно обрабатываем n тестов.
while (n--)
{
Читаем входную строку s. В строке res строим
результат.
cin >> s;
res.clear();
Перебираем буквы строки s.
for (i = 0; i < s.size();
i++)
{
Если текущая буква si заглавная, то ставим
перед ней символ ‘_’ (если она не
первая в строке, то есть i > 0) и преобразовываем si в строчную.
if (s[i] >= 'A' && s[i] <= 'Z')
{
s[i] = s[i] - 'A' + 'a';
if (i > 0) res += '_';
}
Дописываем si к res.
res += s[i];
}
Выводим ответ для текущего теста.
cout << res << endl;
}